An error correction circuit is a circuit used in various fields such as for communication devices or storage techniques. Among the error correction circuits, an error correction circuit that uses BCH code with M-bit (M is an integer of 2 or more) error correction capability can surely correct errors of M bits or lower bit. The error correction circuit using BCH code makes an error correction by successively operating three types of circuits, which are a syndrome calculation circuit, an error locator polynomial deriving circuit, and an error location calculating circuit (Chien search circuit). Each process can independently be executed, and when plural error correction processing frames, each including data and redundant part for an error correction, are processed, they can be processed in a pipeline manner.
The error correction circuit using BCH code confirms that a number of error bits (number of errors) that is an output from the error locator polynomial deriving circuit and a number of error bits detected by the error location calculating circuit agree with each other or not, thereby determines whether the error correction is correctly done or not. After the determination as to whether the error correction is correctly done or not, the next error correction process is started.
When the number of error bits (number of errors) that is the output from the error locator polynomial deriving circuit and the number of error bits detected by the error location calculating circuit do not match in the determination as to whether the error correction is correctly done or not, the error correction is not executed, and it is determined that the error correction is impossible. In this case, although it results in the error correction not correctly executed, the process of the error location calculating circuit is always executed, which leads to consume power of the error location calculating circuit. In addition, although it results in the error correction not correctly executed, the process of the error location calculating circuit is always executed, which prevents processing speed from increasing.